9.1 CXL 启动和重置概述 (CXL Boot and Reset Overview)
这一节是理解 CXL 设备如何在系统中进行生命周期管理的基础。它定义了设备会遇到的基本重置类型,并着重阐述了 CXL 相对于传统 PCIe 在重置流程中最核心的一个架构性区别——预警机制。
- 重置类型的定义 (与PCIe的共通之处)
首先,该章节明确了 CXL 设备可以遇到的三种“常规重置”(Conventional Reset)。这些定义与 PCIe 基础规范保持一致,确保了底层的兼容性。
- 冷重置 (Cold Reset): 这是最彻底的重置。它涉及到设备主电源的移除和重新上电,并伴随着 PERST# 信号(或等效的、具体形态规范的机制)的触发。
- 温重置 (Warm Reset): 这种重置不涉及断电。它通过外部信号,如 PERST#(一种边带信号),来触发设备的重置流程。
- 热重置 (Hot Reset): 这种重置由链路自身的状态变化触发,例如通过链路训练状态机 (LTSSM) 或链路断开 (Link Down) 事件来启动。
关键点: 该规范特意指出,功能级重置 (FLR) 和 CXL 重置 (CXL Reset) 不被视为 “常规重置”。这是因为它们的范围和目的与这三种基础重置不同,后续章节会详细说明。
- CXL 架构的核心区别:预警机制 (The "Warning" Mechanism)
这是 9.1 节最重要的内容,也是 CXL 为支持缓存一致性而引入的关键架构创新。
传统的 PCIe 设备在收到重置信号时,通常无法知道是什么系统级事件(比如计划内重启、系统崩溃或进入睡眠)触发了这次重置。对于一个简单的 PCIe 设备来说这问题不大,但对于拥有缓存(CXL.cache)或直接管理内存(CXL.mem)的 CXL 设备来说,突然的重置可能会导致数据丢失或一致性状态被破坏。
为了解决这个问题,CXL 提出了以下规则:
- 强制性预警: 在系统发起系统级的重置或进入 Sx 睡眠状态之前,必须向所有 CXL 设备发出警告。
- 通信方式: 这个警告是通过 CXL 电源管理 (PM) 消息(一种 Vendor-Defined Message,即VDM)来传达的。
- 预警机制下的主机与设备责任 (The Handshake Protocol)
这个预警机制定义了一套主机和设备之间的交互协议,以确保系统状态的平稳过渡。
- 设备责任:
- CXL 设备在收到预警消息后,必须回复一个正确的确认 (Acknowledge) 消息。
- 即使设备本身不需要执行任何特殊操作(例如,它没有缓存需要写回),也必须回复确认消息。
- 主机责任:
- 为了防止因某个设备没有响应而导致整个系统卡死(死锁),主机必须实现一个超时机制。
- 如果在超时期限内没有收到某个设备的确认消息,主机会假定该设备已经收到了响应,然后继续执行后续的重置或睡眠流程。
- 流程的稳健性与例外情况
虽然预警机制是 CXL 的一个重要设计,但系统设计必须考虑到例外情况,以保证稳健性。
- 并非所有重置都有预警: CXL 设备的设计必须能够正确处理没有预警消息的重置事件。
- 无预警的例子:
- 当一个设备上游的交换机端口的“Secondary Bus Reset”位被软件置位时,会直接对下游设备触发一个热重置,这个过程不会有预警消息。
- 在某些错误情况下,承载预警信息的 PM VDM 消息本身也可能在传输中丢失。